/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.easoftware.code.mb;

import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.logging.Level;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import net.easoftware.code.beans.facade.UsuarioDbFc;
import net.easoftware.code.beans.facade.UsuarioFc;
import net.easoftware.code.dao.ActividadesDao;
import net.easoftware.code.dao.SeguridadDao;
import net.easoftware.code.error.EaError;
import net.easoftware.code.mb.annotation.GenericMaintenanceConfig;
import net.easoftware.code.util.FacesUtil;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.log4j.Logger;

/**
 *
 * @author EADeveloper
 */
@Named
@SessionScoped
@GenericMaintenanceConfig(actions = {GenericMaintenanceConfig.NEW, GenericMaintenanceConfig.DEL}, title = "Mantenimiento de Usuarios Sistema")
public class MbUsuarios implements Serializable, GenericMaintenanceWrapper {

    Logger logger = Logger.getLogger(MbUsuarios.class.getName());
    @Inject
    private ActividadesDao actividadesDao;
    @Inject
    private SeguridadDao seguridadDao;
    @Inject
    UsuarioDbFc usuarioDb;
    @Inject
    UsuarioFc usuario;
    private List<UsuarioDbFc> usuarios;
    private UsuarioDbFc usuarioDel;

    public UsuarioDbFc getUsuarioDel() {
        return usuarioDel;
    }

    public void setUsuarioDel(UsuarioDbFc usuarioDel) {
        this.usuarioDel = usuarioDel;
    }

    public List<UsuarioDbFc> getUsuarios() {
        try {
            usuarios = seguridadDao.getUsuarios();
        }
        catch (EaError ex) {
            logger.error("Error", ex);
        }
        return usuarios;
    }

    public void validarUsuario() {
        try {
            seguridadDao.validateUsuer(usuario);
        }
        catch (EaError ex) {
            Logger.getLogger(MbUsuarios.class.getName()).error("Error", ex);
            FacesUtil.addMessagesError(ex.getMessage());
        }
    }

    public void setUsuarios(List<UsuarioDbFc> usuarios) {
        this.usuarios = usuarios;
    }

    public void saveRow(org.primefaces.event.RowEditEvent e) {
        try {
            UsuarioFc u = ( (UsuarioFc) e.getObject() );
            BeanUtils.copyProperties(usuarioDb, u);
            actionActualizar();
        }
        catch (EaError | IllegalAccessException | InvocationTargetException ex) {
            logger.error("Error", ex);
        }
    }

    public void actionGuardar() throws EaError {
        try {
            if (!usuarioDb.getNuevaClave().equalsIgnoreCase(usuarioDb.getNuevaClaveConfirm())) {
                throw new EaError("Las claves ingresadas no son iguales!");
            } else {
                usuarioDb.setClave(usuarioDb.getNuevaClave());
            }
            seguridadDao.agregar(usuarioDb);
            actividadesDao.registrarAction("Agregar Usuario ", usuarioDb.getUsuario(), usuarioDb.getUsuario());
            actionLimpiar();
        }
        catch (EaError ex) {
            throw ex;
        }

    }

    public void actionActualizar() throws EaError {
        try {
            if (usuarioDb.isCambioClave()) {
                if (!usuarioDb.getNuevaClave().equalsIgnoreCase(usuarioDb.getNuevaClaveConfirm())) {
                    throw new EaError("Las claves ingresadas no son iguales!");
                } else {
                    usuarioDb.setClave(usuarioDb.getNuevaClave());
                }
            }
            seguridadDao.actualizar(usuarioDb);
            actividadesDao.registrarAction("Actualizar Usuario ", usuarioDb.getUsuario(), usuarioDb.getUsuario());
        }
        catch (EaError ex) {
            logger.error("Error", ex);
            throw ex;
        }
    }

    public void actionEliminar() {
        try {
            seguridadDao.eliminar(usuarioDb);
            actividadesDao.registrarAction("Eliminar Usuario ", usuarioDb.getUsuario(), usuarioDb.getUsuario());
        }
        catch (EaError ex) {
            logger.error("Error", ex);
        }
    }

    public void actionLimpiar() {
        try {
            BeanUtils.copyProperties(usuarioDb, new UsuarioFc());
        }
        catch (IllegalAccessException | InvocationTargetException ex) {
            logger.error("Error", ex);
        }
    }

    @Override
    public String getFormPage() {
        return "/module/usuarios/user.xhtml";
    }

    @Override
    public String getGridPage() {
        return "/module/usuarios/users.xhtml";
    }

    @Override
    public void actionSave() throws EaError {
        actionGuardar();
    }

    @Override
    public void actionUpdate() throws EaError {
        actionActualizar();
    }

    @Override
    public void actionDelete() throws EaError {
        actionEliminar();
    }

    @Override
    public void actionNew() throws EaError {
        usuarioDb.setClave("");
        usuarioDb.setUsuario("");
        usuarioDb.setNombres("");
        usuarioDb.setApellidos("");
        usuarioDb.setCorreo("");
        usuarioDb.setEstado(1);
        usuarioDb.setUltimoIngreso(null);
        usuarioDb.setEdicion(false);
        this.usuarioDb.setCambioClave(false);
    }

    @Override
    public void toExcel() throws EaError {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void toPDF() throws EaError {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void actionSelect() throws EaError {
        try {
            BeanUtils.copyProperties(this.usuarioDb, this.usuarioDel);
            this.usuarioDb.setEdicion(true);
            this.usuarioDb.setCambioClave(false);
        }
        catch (IllegalAccessException | InvocationTargetException ex) {
            java.util.logging.Logger.getLogger(MbLineasNegocio.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void actionCustom1() throws EaError {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void actionCustom2() throws EaError {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String getActionCustom1Label() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String getActionCustom2Label() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean isEnabledActionCustom1() {
        return false;
    }

    @Override
    public boolean isEnabledActionCustom2() {
        return false;
    }
}
